﻿/**
 * @file NTEngine.h
 * @brief ライブラリ共通定義ファイル
 * @author naoki takeda
 * @version 0.0.1(2009/7/11)
 */
#ifndef INCLUDED_NTENGINE_NTENGINE_H
#define INCLUDED_NTENGINE_NTENGINE_H

/**
 * @brief エンジンの名前空間
 */
namespace NTEngine {

/**
 * @brief 簡易例外
 */
enum Exception {
	EXCEPTION_IGNORE, //!< 例外がきても無視する
	EXCEPTION_EXIT, //!< 例外がきたら終了したい
};

/**
 * @brief 停止発行
 */
void halt( const char* msg, const char* file, unsigned line );

typedef unsigned char Byte; //!< バイト
typedef unsigned long Color32; //!< 32bitカラー

} // namespace NTEngine

#define HALT( e ) ( NTEngine::halt( #e, __FILE__, __LINE__ ) )
#define HARD_ASSERT( e ) ( ( !!( e ) ) || ( HALT( e ), 0 ) )
#define SAFE_DELETE( p ) { delete ( p ); ( p ) = 0; }
#define SAFE_DELETE_ARRAY( p ) { delete[] ( p ); ( p ) = 0; }
#define OPERATOR_DELETE( p ) { operator delete ( p ); ( p ) = 0; }

#ifndef NDEBUG
#define NEW new( __FILE__, __LINE__ )
#define OPERATOR_NEW( x ) operator new( ( x ), __FILE__, __LINE__ )
#define ASSERT( e ) ( ( !!( e ) ) || ( HALT( e ), 0 ) )
#else // NDEBUG
#define NEW new
#define OPERATOR_NEW( x ) operator new( x )
#define ASSERT( e )
#endif // NDEBUG

// ベースサービスヘッダ
#include "NTEngine/Base/MemoryManager.h"
#include "NTEngine/Base/Array.h"

#endif // INCLUDED_NTENGINE_NTENGINE_H
